package base

import (
	"gitee.com/slion/helper"
	"github.com/sirupsen/logrus"
	"github.com/tietang/props/kvs"
	"gitee.com/slion/infra"
	"sync"
)

var props kvs.ConfigSource

// 对外暴露的接口(获取props对象)
func Props() kvs.ConfigSource {
	return props
}

type PropStarter struct {
	infra.BaseStarter
}

func (p *PropStarter) Init(ctx infra.StartContext){
	conf := ctx[helper.MapKeyConf]
	props = conf.(kvs.ConfigSource) // 通过类型断言转换类型
	logrus.Info("props初始化...")
	GetSystemAccount()
}

// 系统账户结构体
type SystemAccount struct {
	UserId string
	UserName string
	AccountName string
	AccountNo string
}

// 系统账户变量
var systemAccount *SystemAccount
// once对象实例
var once sync.Once

// 获取系统账户配置信息
func GetSystemAccount() *SystemAccount{
	// Do()方法只会执行一次,哪怕被多次调用
	once.Do(func() {
		systemAccount = &SystemAccount{}
		err := kvs.Unmarshal(Props(), systemAccount, "system.account")
		if err != nil{
			panic(err)
		}
	})
	return systemAccount
}

// 根据key获取配置信息
func GetProps(key string) string {
	return Props().GetDefault(key, "")
}
